package de.zigapeda.flowspring.gui.treetable; import java.awt.Dimension; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; import javax.swing.JTable; import javax.swing.tree.TreePath; import de.zigapeda.flowspring.controller.MediaLibraryListener; import de.zigapeda.flowspring.data.DataNode; import de.zigapeda.flowspring.data.PlaylistTrack; import de.zigapeda.flowspring.data.Title; import de.zigapeda.flowspring.data.YoutubeVideo; import de.zigapeda.flowspring.interfaces.TreeRow; public class TreeTable extends JTable { private static final long serialVersionUID = -2433194227243028278L; private TreeTableCellRenderer tree; private MediaLibraryListener medialibrarylistener; public TreeTable(AbstractTreeTableModel treeTableModel) { super(); // JTree erstellen. tree = new TreeTableCellRenderer(this, treeTableModel); // Modell setzen. super.setModel(new TreeTableModelAdapter(treeTableModel, tree)); // Gleichzeitiges Selektieren fuer Tree und Table. TreeTableSelectionModel selectionModel = new TreeTableSelectionModel(); tree.setSelectionModel(selectionModel); //For the tree setSelectionModel(selectionModel.getListSelectionModel()); //For the table // Renderer fuer den Tree. setDefaultRenderer(TreeTableModel.class, tree); // Editor fuer die TreeTable setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor(tree, this)); // Kein Grid anzeigen. setShowGrid(false); // Keine Abstaende. setIntercellSpacing(new Dimension(0, 0)); DragSource dragSource = DragSource.getDefaultDragSource(); dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, new DragGestureListener() { @Override public void dragGestureRecognized(DragGestureEvent dge) { // TreeRow selrow = this.medialibrary.getValueAt(this.medialibrary.getSelectedRow()); // if(selrow != null) { // if(selrow.getType() == TreeRow.Title) { // Main.getWindow().getPlaylist().addTrack(new PlaylistTrack(selrow.getArtist() + " - " + selrow.getName(),selrow.getInt(),((Title)selrow).getPath())); // int row = TreeTable.this.getSelectedRow(); if(row != -1) { TreeRow selrow = TreeTable.this.getValueAt(row); if(selrow.getType() == TreeRow.Title) { dge.startDrag(DragSource.DefaultCopyDrop, new PlaylistTrack(selrow.getId(), selrow.getArtist() + " - " + selrow.getName(),selrow.getInt(),((Title)selrow).getPath())); } else if(selrow.getType() == TreeRow.YoutubeVideo) { dge.startDrag(DragSource.DefaultCopyDrop, new PlaylistTrack(selrow.getName(),selrow.getInt(),((YoutubeVideo)selrow).getVideoUrl())); } } } }); } public void setModel(AbstractTreeTableModel treeTableModel) { tree = new TreeTableCellRenderer(this, treeTableModel); if(this.medialibrarylistener != null) { tree.addTreeExpansionListener(this.medialibrarylistener); } super.setModel(new TreeTableModelAdapter(treeTableModel, tree)); TreeTableSelectionModel selectionModel = new TreeTableSelectionModel(); tree.setSelectionModel(selectionModel); setSelectionModel(selectionModel.getListSelectionModel()); setDefaultRenderer(TreeTableModel.class, tree); setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor(tree, this)); } public TreeTableCellRenderer getTree() { return tree; } public TreePath getPathAt(int row) { TreePath treePath = tree.getPathForRow(row); return treePath; } public TreeRow getValueAt(int row) { TreePath treePath = tree.getPathForRow(row); TreeRow data = ((DataNode)treePath.getLastPathComponent()).getData(); return data; } public DataNode getNodeAt(int row) { TreePath treePath = tree.getPathForRow(row); return (DataNode)treePath.getLastPathComponent(); } public int getParentRowAt(int row) { TreePath treePath = tree.getPathForRow(row); return tree.getRowForPath(treePath.getParentPath()); } public void setListener(MediaLibraryListener medialibrarylistener) { this.medialibrarylistener = medialibrarylistener; } }